クロス (ピボット) テーブルをフラット テーブルに変換する必要がある場合があります。この手順は「」と呼ばれます。 データの修正 」
プログラム LibreOffice Calc には、ピボット テーブルを " フラット 」と書かれていますが、対応する手順を自分で書くこともできますので、その方法を見てみましょう。
問題の本質をより明確に理解するために、下の図を見てみましょう。左側には行列形式のテーブル (ピボット テーブル) があり、右側には列を含む通常のテーブル (フラット テーブル) があります。
テーブルを展開するときは、マトリックス テーブル内の列の交差部分である属性と値のペアを解凍し、それらをフラット テーブル内のフラット化された列に再配置します。
メニュー Tools - Macros - Edit Macros... を開き、Module1 を選択して、次のテキストをモジュールにコピーします。
Sub UnPivotTable
' moonexcel.com.ua
Dim oBook As Object
Dim oActiveSheet As Object
Dim oSelRange As Object
Dim oNewSheet As Object
Dim i As Long
Dim iTopLabelRowCount As Integer
Dim iSideLabelColCount As Integer
oBook = ThisComponent
oActiveSheet = oBook.CurrentController.ActiveSheet
oSelRange = oBook.CurrentSelection
' 新しいシートを追加する
oBook.Sheets.insertNewByName("UnPivoted Table",0)
oNewSheet = oBook.Sheets(0)
' ヘッダーのサイズを決定する
iTopLabelRowCount = InputBox(" 一番上のヘッダーは何行ですか? ")
iSideLabelColCount = InputBox(" サイドヘッダーは何列ですか? ")
i = 0
For r = (iTopLabelRowCount + 1) To oSelRange.Rows.Count
For c = (iSideLabelColCount + 1) To oSelRange.Columns.Count
For j = 1 To iSideLabelColCount
oNewSheet.getCellByPosition(j-1, i).Formula = oSelRange.getCellByPosition(j-1, r-1).Formula
Next j
For k = 1 To iTopLabelRowCount
oNewSheet.getCellByPosition(j + k - 2, i).Formula = oSelRange.getCellByPosition(c-1, k-1).Formula
Next k
oNewSheet.getCellByPosition(j + k - 2, i).Formula = oSelRange.getCellByPosition(c-1, r-1).Formula
i = i + 1
Next c
Next r
End Sub
次に、Macro Editor を閉じて、LibreOffice Calc のワークシートに戻ります。上部と左側のヘッダーを持つテーブル全体を選択し、メニュー Tools - Macros - Run Macro... から新しいマクロを実行します。
マクロは新しい名前付きシートをワークブックに挿入します。
ユーティリティを使用することもできます 「ピボットテーブル (Unpivot)」 拡張機能をインストールすることで YLC_ユーティリティ.oxt 。
その後、このユーティリティは LibreOffice Calc で開かれるすべてのファイルで使用できるようになります。